Saltar al contenido principal

DIDCOMM

DIDComm, que significa "Decentralized Identifier Communication" es un conjunto de especificaciones y protocolos diseñados para permitir la comunicación segura y privada entre entidades autónomas utilizando Identificadores Descentralizados (DIDs).

DIDComm Messaging se refiere a la parte de DIDComm que se centra en la mensajería y la comunicación entre diferentes sistemas y entidades. En esencia, DIDComm Messaging proporciona un marco para permitir que las partes autónomas se comuniquen de manera segura y privada utilizando DIDs como base de identificación. Esto es fundamental para la construcción de sistemas descentralizados en los que las entidades necesitan comunicarse sin depender de intermediarios centralizados.

DIDComm Messaging incluye especificaciones para la estructura de los mensajes, el cifrado de extremo a extremo, la autenticación y la autorización de las partes involucradas. También se preocupa por la interoperabilidad, lo que significa que busca permitir que diferentes sistemas y plataformas implementen DIDComm Messaging de manera coherente para que puedan comunicarse entre sí.

Si querés saber mas sobre DIDComm Messaging visita la documentacion oficial proporcionada por la DIF DIDComm Messaging v2.1

Ejemplo práctico

DidComm

Imagina que Alice y Bob son dos individuos que desean comunicarse de manera segura y privada utilizando sus Identificadores Descentralizados (DIDs).

Alice comparte su DID con Bob y viceversa, lo que les permite saber cómo comunicarse y cómo cifrar y descifrar los mensajes.

Alice decide enviar un mensaje a Bob. Utiliza su DID y el DID de Bob para iniciar la comunicación.

Alice cifra el mensaje utilizando la clave pública del DID de Bob. Esto garantiza que solo Bob pueda descifrar y leer el mensaje, ya que solo él posee la clave privada correspondiente a su clave pública.

Alice envía el mensaje cifrado a través de la red a la dirección del DID de Bob.

El sistema de Bob recibe el mensaje cifrado dirigido a su DID.

Bob utiliza su clave privada (que solo él posee) para descifrar el mensaje enviado por Alice. Esto garantiza que solo Bob pueda leer el contenido del mensaje.

Bob decide responder al mensaje de Alice. Inicia una nueva comunicación utilizando su DID y el DID de Alice.

Bob cifra su respuesta utilizando la clave pública del DID de Alice y envía el mensaje cifrado de regreso a través de la red.

Alice utiliza su clave privada para descifrar la respuesta de Bob y lee su contenido.

Este ejemplo ilustra cómo DIDComm Messaging permite a Alice y Bob comunicarse de manera segura y privada utilizando sus DIDs. La comunicación está cifrada de extremo a extremo y se basa en la autenticación de las partes a través de sus DIDs. El protocolo permite que la comunicación ocurra de manera asincrónica, lo que significa que no es necesario que Alice y Bob estén en línea al mismo tiempo para intercambiar mensajes.

Empaqueta y Desempaqueta un mensaje

1. Instala

npm i @extrimian/kms-client
npm i @extrimian/kms-core

2. Instancia un KMS

const kms = new KMSClient({
lang: LANG.en,
storage: new FileSystemKMSSecureStorage({
filepath: "file-system-storage",
}),
didResolver: (did: string) => resolveDID(did),
});

3. Empaqueta

const packedMessage = await kms.packDIDCommV2({
senderVerificationMethodId:
"did:quarkid:zksync:EiDKngDKk7dQZxSxAiDeZzVh8dAuu5jdJfgmLnmPV08heg#didComm", //Verification method del emisor del mensaje
recipientVerificationMethodIds: [
"did:quarkid:zksync:EiAGXcAlFpaGg870bgyU05PNSeIINqDvv__wWQ0RdtwcXQ#didComm",
], //Verification method del destinatario del mensaje, puede haber mas de un destinatario
message: IDIDCommMessage, //Mensage de tipo DIDComm
packing: "authcrypt",
});

Estructura de Mensaje de DIDCOM

interface IDIDCommMessage {
type: string;
from?: string;
to: string[];
thid?: string;
pthid?: string;
id: string;
expires_time?: string;
created_time?: string;
next?: string;
from_prior?: string;
body: any;
}

4. Desempaqueta

const unpackedMsg = await kms.unpackvDIDCommV2(
"did:quarkid:zksync:EiAGXcAlFpaGg870bgyU05PNSeIINqDvv__wWQ0RdtwcXQ", //DID del destinatario
packedMessage
);